%!TEX root = all.tex

\section{Previous Work}
Suppose one needs to solve a partial differential equation of the form

\begin{equation} \label{eq:maineq}
Du = g
\end{equation}

\noindent on some domain $\Omega$ with boundary $\Gamma$. {\em D} is the differential operator, {\em g} is the source term
and {\em u} is the exact solution that is sought.


\subsection{Method of Exact Solutions}
In the widely used verification Method of Exact Solutions one first derives exact
solutions to the set of equations solved by the code. The exact solution is a mathematical
expression that gives the solution at all locations in space and time. They can be derived
using mathematical methods such as the separation of variables, integral transforms
(Laplace transforms, Green functions, etc.), etc. Then the code is run with corresponding
inputs and a numerical (discrete) solution is generated. This generated numerical solution
is compared against exact solution \cite{R3}\cite{R7}, to compute an error norm.
\\
\\
A major disadvantage of the Method of Exact Solutions is that it is not always
possible or often very difficult to find an exact solution to the equation(s) 
(e.g. in case when D is non-linear). Also, certain exact solutions (e.g., which use Laplace
transforms, infinite sums, etc.) are difficult to implement, which is required for
computing the error norms.

\subsection{Method of Manufactured Solutions}
Another widely used technique for verifying numerical solvers is the Method of
Manufactured solutions \cite{R4}\cite{R5}\cite{R6}\cite{R7}.  To verify that a code solves equation \ref{eq:maineq}
correctly a solution {\em u} is manufactured (e.g. using an arbitrary mathematical
function), and then the operator {\em D} is applied to compute the source terms {\em g}, which become the
input to the solver \cite{R3}\cite{R4}.
\\
\\
The Method of Manufactured Solutions is much simpler than the Method of Exact solutions
because it does not require the user to solve the set of equations (i.e., invert the differentiation operator
{\em D}). However, this method has limitations. The solutions are arbitrary and may not reflect the
true nature of a real life system and the physical solution that is being simulated. For
instance, in order to avoid unnatural oscillations (due to discontinuities, sharp changes in
the solution, etc.), which can occur at high resolutions, solvers use special techniques
such as gradient, slope limiters, etc. As a result, in this case the Method of Manufactured
Solutions may not be an appropriate code verification technique.